package main

import (
	"errors"
	"fmt"
	"math/rand/v2"
)

func main() {
	maybeError := func() (int, error) {
		num := rand.IntN(10)
		if num%2 == 0 {
			return num, nil
		} else {
			// 创建一个错误
			err := errors.New("错误：生成了一个奇数 ")
			// 创建一个携带参数的错误
			err = fmt.Errorf("错误：生成了一个奇数 %d", num)
			return 0, err
		}
	}
	// 主动处理错误
	result, err := maybeError()
	if err != nil {
		fmt.Println("Error occurred:", err)
	} else {
		fmt.Println("Result is:", result)
	}

	// 忽略错误处理（不推荐）
	rsp, _ := maybeError()
	fmt.Println("继续处理 rsp:", rsp)

}

// Go 的哲学可以浓缩成三句话：
// 没有“异常”这个概念 —— 任何失败路径都用普通返回值表达。和Rust的Result类似。
// 错误是一个接口 —— 只要实现了 error 接口（Error() string）的值，就可以当错误用。
// type error interface {
// 	Error() string
// }
// 错误必须处理 —— 编译器不会帮你忽略返回值；你显式判断 err != nil，否则就是故意丢弃（_ = err）。
